// **************************************************************
// COPYRIGHT(c)2021, Xidian University
// All rights reserved.
//
// IP LIB INDEX :  
// IP Name      :      
// File name    :  
// Module name  : field_select 
// Full name    :  
// Time         : 2021 
// Author       : Haoxiaofei 
// Email        : 1531804419@qq.com
// Data         : 
// Version      : V 2.0 
// 
// Abstract     :ctr_field根据maetedata中的表项配置信息选择对应级流表的匹配字段输入
// Called by    :  
// 
// --------------------------------------------------------------------------------
// *******************
// TIMESCALE
// *******************
// 
`timescale 1ns/1ps
// 
// *******************
// INCLUDE
// *******************
// 
// 
// 
// *******************
// INFORMATION
// *******************
// 
// 
// 
// *******************
// DEFINE(s)
// *******************
// 
// 
// 
// *******************
// DEFINE MODULE PORT
// *******************
// 
module field_mux_1024_128(

       input  wire                  clk                      ,
       input  wire                  rst_n                    ,
       input  wire [7  : 0   ]      ctr_field                ,
       input  wire                  vector_rdy               ,
       input  wire [0   : 1023]     pktheader_vector         ,
       // output reg                   select_end_o             ,
       output wire  [7  : 0   ]      field_buffer_128_o                               

);
// *******************
// DEFINE LOCAL PARAMETER
// *******************
// 
// 
// 
// *******************
// INNER SIGNAL DECLARATION
// *******************
// REGS
// 
reg [127  : 0]field_buffer_128;
reg           select_end;
// 
// WIRES



// 
// 
// *******************
// INSTANTCE MODULE
// *******************
always @(posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0) begin
        field_buffer_128       <= 128'b0   ;
        select_end       <= 1'b0   ;
    end
    else if(vector_rdy) begin
                                    select_end <= 1'b1;
            case(ctr_field[7:5])
                          3'b000 : field_buffer_128 <= pktheader_vector[0   : 127 ];
                          3'b001 : field_buffer_128 <= pktheader_vector[128 : 255 ];
                          3'b010 : field_buffer_128 <= pktheader_vector[256 : 383 ];
                          3'b011 : field_buffer_128 <= pktheader_vector[384 : 511 ];
                          3'b100 : field_buffer_128 <= pktheader_vector[512 : 639 ];
                          3'b101 : field_buffer_128 <= pktheader_vector[640 : 767 ];
                          3'b110 : field_buffer_128 <= pktheader_vector[768 : 895 ];
                          3'b111 : field_buffer_128 <= pktheader_vector[896 : 1023];
                          default : field_buffer_128 <= 128'b0   ;
            endcase
    end 
    else begin
                                    field_buffer_128 <= 128'b0   ;
                                    select_end <= 1'b0   ;
    end
end   

// *******************
// MAIN CORE
// *******************
//
field_mux_128_8 field_mux0_128_8(
          .clk             (clk              ),
          .rst_n           (rst_n            ),
          .ctr_field       (ctr_field[4:0]   ),
          .vector_rdy      (select_end       ),
          .pktheader_vector(field_buffer_128 ),
          // .select_end      (select_end_o     ),
          .field_buffer    (field_buffer_128_o )    
);

endmodule